#include "zf_common_headfile.h"
#ifndef CAMERA_H_
#define CAMERA_H_


#define COL 188
#define ROW 120 //please note smallest is 120/2, because of press image
#define ROW_Start ROW-1
#define COL_End COL-1
#define COL_Start 1
typedef struct
{
float Camera_Error;//摄像头处理得到的偏差
uint8_t begin_err;//代表从中线数组哪一行开始计算偏差
uint16_t Camera_Exp;      //曝光时间,时间越短,图像越暗
uint8_t begin_x; //最长白列所在x坐标
uint8_t lst_rows; //最长白列存储行数
uint8_t Refer_Threshold; //参考阈值
unsigned char Ostu_Threshold;
uint8_t Diff_Ratio;//摄像头处理差比和阈值
uint8_t white_max_point; //黑点参考阈值 参考阈值x80%
uint8_t white_min_point; //白点参考阈值 参考阈值x120%

unsigned char lst_cols;//最长白行存储列数
unsigned char longest_y;

unsigned char zebra_y; //得到的斑马线的底部y值(不是精确的)
}Image_DataTypedef;//这里将存储图像处理用到的需要根据场地调整的变量?


#define QUEUE_SIZE 5 //队列长度
// 假设图像状态由一个枚举表示
typedef enum {
    IN_PROGRAM, // 图像进入程序
    NOT_IN_PROGRAM // 图像没有进入程序
} ImageState;
extern ImageState stateQueue[QUEUE_SIZE]; // 用于存储最近5幅图像的状态
extern ImageState currentState;//存储当前图像状态

extern unsigned long Picture_Count;//圆环820  //十字
extern Image_DataTypedef Image_DataStruct;
extern uint8_t Gray_Image[ROW][COL];

void ImageProcess(void);
float Get_Error(void);
void ImageQueue(void);
unsigned char otsuThreshold(unsigned char *image,unsigned char row_num);
#endif